--[[
    Aprs4G by BG2LBF - OTA升级配置（BD3ND增强日志 + 首检等网）
    说明：
    - 使用 code/lib/libfota.lua（合宙 IOT 平台）完成升级检查与下载
    - 首次检查等待网络注册完成，提高命中率
    - 打印关键上下文：产品KEY/项目/版本/BSP/IMEI（真实与伪装）
    - 保留每小时定时检查
]]

local libfota = require("libfota")
local libnet  = require("libnet")

-- 回调码说明（与 libfota 文档一致）
local FOTA_DESC = {
    [0] = "OK",
    [1] = "CONNECT_FAIL",
    [2] = "URL_ERROR",
    [3] = "SERVER_CLOSED",
    [4] = "RX_ERROR",
    [5] = "VERSION_FORMAT",
}

-- 仅用于日志显示：与 libfota 内部一致的“首位减一”伪装
local function disguise_imei(s)
    if type(s) ~= "string" or #s == 0 then return s end
    local c = s:sub(1, 1)
    local d = tonumber(c)
    if not d then return s end
    return tostring(d - 1) .. s:sub(2)
end

-- ota 成功后重启（带描述日志）
local function fota_cb(ret)
    log.info("fota", "callback", ret, FOTA_DESC[ret] or "?")
    if ret == 0 then
        log.info("fota", "upgrade ok, reboot")
        rtos.reboot()
    end
end

-- 首次检查：等待网络注册后再触发
sys.taskInit(function()
    sys.waitUntil("CFGLOADED")
    local imei_real = (mobile and mobile.imei and mobile.imei()) or "?"
    local imei_fake = disguise_imei(imei_real)
    local proj      = _G.PROJECT or "?"
    local ver_app   = _G.VERSION or "?"
    local bsp       = (rtos and rtos.bsp and rtos.bsp()) or "?"
    local ver_bsp   = (rtos and rtos.version and rtos.version()) or "?"
    local pkey      = _G.PRODUCT_KEY or "?"

    log.info("fota", "ctx",
        "product", pkey,
        "project", proj,
        "version", ver_app,
        "bsp", bsp, ver_bsp,
        "imei_real", imei_real,
        "imei_fake", imei_fake)

    -- 等待网络注册（最多 90s）
    local t0 = os.time()
    while (mobile and mobile.status and mobile.status() ~= 1) and (os.time() - t0 < 90) do
        sys.wait(1000)
    end
    log.info("fota", "net_ready", (mobile and mobile.status and mobile.status()) or -1)

    -- 首检
    libfota.request(fota_cb)
end)

-- 周期检查：每小时一次
sys.timerLoopStart(libfota.request, 3600000, fota_cb)

